Event Loop
자바스크립트의 엔진은 '메모리 힙' 과 '콜 스택'으로 구성이 되어있다.
자바스크립트는 단일 스레드 프로그래밍이고 이 뜻은
'콜스택' 이 하나라는거임
- Memory Heap : 메모리 할당이 일어나는곳 (선언한 함수,변수등)
- Call Stack : 코드가 실행 될때 쌓이는 곳 스택 형태로 쌓임 그 해당함수의 실행 컨텍스트가 쌓임 (지역변수 , 매개변수 , this바인딩 , 스코프 체인정보)
- 함수 호출: 함수가 호출될 때마다 해당 함수의 실행 컨텍스트가 콜 스택에 추가됩니다.
- 실행 순서: 가장 최근에 추가된 함수(스택의 최상위)부터 실행됩니다.
- 함수 완료: 함수 실행이 완료되면 해당 함수의 컨텍스트가 스택에서 제거됩니다.
- Web API 브라우저에서 제공하는 api DOM, Ajax , Timeout 등이있고 콜스택에서 실행된 비동기 함수는 Web API를 호출하고 Web API는 콜백함수를 Callback Queue에 넣음
- 비동기적으로 실행된 콜백함수가 보관되는 영역임
Event Loop는 콜스택과 콜백큐의 상태를 체크해서 콜스택이 빈상태가 되면 콜백큐의 첫번째 콜백을 콜스택에 밀어넣는것
자바스크립트는 싱글스레드인데 멀티 스레드처럼 어떤 작업을 우선으로 동작시키는지 정하는 흐름을 제어하는것이 이벤트루프
마이크로태스크 큐 , 애니메이션 프레임등의 것도있음
긴 작업이 완료될 때까지 다른 모든 작업들이 멈춰있다가 해당 작업이 끝난 후에 다시 진행이 될 것입니다.
이러한 경우를 바로 블로킹이라고 합니다.
하지만 우리는 웹에서 파일도 다운로드하면서 웹 서핑도 하고 동영상도 보고 여러 가지 일을 할 수 있습니다.
이건 바로 논블로킹 방식 때문입니다.